/**
 * A.获取购物车初始化数据 => 在onShow 中获取
 * 1. 从本地缓存中获取购物车的缓存数据 key = "carts"
 * 如果获取的结果是空，那么直接返回一个空数组
 * 2. 获取方式 通过wx.getStorageSync("carts")
 */

/**
 * B. 实现空白购物车 
 * 1. "去逛逛" =》 跳转到分类商品页面
 * 2. 温馨提示的信息内容
 */
import { showModal  } from "../../utils/asyncWx.js"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    carts: [], // 购物车的数据
    allChecked: false, //默认购物车里面的商品都是被选中的
    totalNum: 0, //选中商品的数量
    totalPrice: 0 //选中的商品价格总和
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let carts = wx.getStorageSync('cars') || []
    this.setCart(carts);
  },
  //   购物车列表的选中事件 handleCheck
  // 1. 获取当前被点击列表的 唯一标识  goods_id
  // 2. 获取当前的购物小车列表 carts
  // 3. 对购物车小车列表 carts 进行循环 找到 goods_id 对应的 item
  // 4. item.checked = ! item.checked
  // 5. 再把最新的cart 通过 setCart 方法设置回去 
  handleCheck: function (e) {
    let goods_id = e.currentTarget.dataset.goods_id
    let carts = wx.getStorageSync('cars')
    const index = carts.findIndex(v => v.goods_id === goods_id);
    carts[index].checked = !carts[index].checked
    this.setCart(carts);
  },
  /// setCart的作用 就是用来计算购物小车需要的总价和数量,以及
  //全选状态 allChecked
  //把全新的 carts 重新设置回 storage 保持 storage里面的carts 与 this.data里面的carts 同步
  // allChecked 的处理逻辑
  //1. allChecked 如果购物车里面的购物车数据 v.checked 属性都为true => allChecked = true
  //2. 其它情况下 allChecked = false
  setCart: function (carts) {
    // 默认全选
    let allChecked = true
    // 商品总数
    let totalNum = 0
    // 选中的商品的总价
    let totalPrice = 0
    carts.forEach(v => {
      if (v.checked) {
        // 计算选中的商品总数
        totalNum += v.num
        // 计算选中的商品总价
        totalPrice += v.num * v.goods_price
      } else {
        // 只要其中一个未选中，全选按钮则不打勾
        allChecked = false
      }
    })
    this.setData({
      // 更新视图
      carts,
      allChecked,
      totalNum,
      totalPrice
    })
    // 更新storage里面的carts
    wx.setStorageSync('cars', carts)
  },
  // 购物车列表的全选事件
  handleAllChecked: function (e) {
    // 从 this.data 获取allchecked 和  carts
    let {
      allChecked,
      carts
    } = this.data
    // 点击全选按钮时，全选状态取反
    allChecked = !allChecked
    //全选按钮状态改变时 改变商品的选中状态
    carts.forEach(v => v.checked = allChecked)
    // console.log(carts);
    this.setCart(carts)
  },
  // 购物车的加减逻辑
  handleOperation: async function (e) {
    // 获取参数
    const {
      goods_id,
      operation
    } = e.target.dataset
    // 获取本地存储的购物车信息
    let carts = wx.getStorageSync('cars')
    // 找到点击的商品在购物车信息中的位置
    const index = carts.findIndex(v => v.goods_id == goods_id)
    // 进行加减操作
    if (operation == -1 && carts[index].num - 1 === 0) {
      // 提示用户是否确认删除该上商品
      const res = await showModal({
        content: "您确定要删除商品？"
      });
      // 确认，删除
      if (res.confirm) {
        carts.splice(index,1)
      }
    } else if (operation == 1 && carts[index].num + 1 > carts[index].goods_number) {
      wx.showToast({
        title: '库存不足',
      })
    } else {
      carts[index].num += operation
    }
    this.setCart(carts)
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})